/**
 * 多项式的项
 * 
 * @author 杨满球（本地）
 *
 */
class Term {
	// 项的系数
	private double coef;
	// 项的指数
	private int expn;

	/**
	 * 构造方法
	 * 
	 * @param coef
	 *            项的系数
	 * @param expn
	 *            项的指数
	 */
	public Term(double coef, int expn) {
		this.coef = coef;
		this.expn = expn;
	}

	/**
	 * 重写项的相等判定方法
	 */
	@Override
	public boolean equals(Object obj) {
		// 强制向下转型
		Term term = (Term) obj;
		// 系数和指数都相同可以判定为相同的项
		if (term.getCoef() == coef && term.getExpn() == expn) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 判断给定项是否是同类项
	 * 
	 * @param term
	 *            给定的项
	 * @return 给定项与当前项是同类项返回true，否则返回false
	 */
	public boolean isSimilarTerms(Term term) {
		// 给定项的指数与当前项相同即为同类项
		if (expn == term.getExpn()) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 重写以获得更为人性化的字符串表示
	 */
	@Override
	public String toString() {
		return coef + "*X^" + expn;
	}

	/**
	 * 改变项的系数，方便合并同类项
	 * 
	 * @param change
	 */
	public void changeCoef(double change) {
		coef = coef + change;
	}

	/**
	 * 获得项的系数
	 * 
	 * @return 项的系数
	 */
	public double getCoef() {
		return coef;
	}

	/**
	 * 设置项的系数
	 * 
	 * @param coef
	 *            需要设置的项的系数
	 */
	public void setCoef(double coef) {
		this.coef = coef;
	}

	/**
	 * 获得项的指数
	 * 
	 * @return 项的指数
	 */
	public int getExpn() {
		return expn;
	}

	/**
	 * 设置项的指数
	 * 
	 * @param expn
	 *            需要设置的项的指数
	 */
	public void setExpn(int expn) {
		this.expn = expn;
	}

}
